package es.indra.malaga.servicios.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.springframework.beans.BeanUtils;

import es.indra.malaga.dao.IProfesorDAO;
import es.indra.malaga.entity.AsignaturaBeanDAO;
import es.indra.malaga.entity.ProfesorBeanDAO;
import es.indra.malaga.entity.UsuarioBeanDAO;
import es.indra.malaga.servicios.IProfesorService;
import es.indra.malaga.viewBeans.AsignaturaView;
import es.indra.malaga.viewBeans.ProfesorView;
import es.indra.malaga.viewBeans.UsuarioView;

public class ProfesorServiceImpl implements IProfesorService {

	private IProfesorDAO profesorDAO;

	public ProfesorServiceImpl() {

	}

	/**
	 * @return the profesorDAO
	 */
	public IProfesorDAO getProfesorDAO() {
		return profesorDAO;
	}

	/**
	 * @param profesorDAO
	 *            the profesorDAO to set
	 */
	public void setProfesorDAO(IProfesorDAO profesorDAO) {
		this.profesorDAO = profesorDAO;
	}

	public void saveProfesor(ProfesorView profesorView) {
		ProfesorBeanDAO profesorBeanDAO = new ProfesorBeanDAO();
		BeanUtils.copyProperties(profesorView, profesorBeanDAO);
		AsignaturaBeanDAO asignaturaBeanDAO = new AsignaturaBeanDAO();
		BeanUtils.copyProperties(profesorView.getAsignaturaView(),
				asignaturaBeanDAO);
		profesorBeanDAO.setAsignaturaBeanDAO(asignaturaBeanDAO);
		UsuarioBeanDAO usuarioBeanDAO = new UsuarioBeanDAO();
		BeanUtils.copyProperties(profesorView.getUsuarioView(), usuarioBeanDAO);
		profesorBeanDAO.setUsuarioBeanDAO(usuarioBeanDAO);
		profesorDAO.insertar(profesorBeanDAO);

	}

	public void actualizarProfesor(ProfesorView profesorView) {
		ProfesorBeanDAO profesorBeanDAO = new ProfesorBeanDAO();
		BeanUtils.copyProperties(profesorView, profesorBeanDAO);
		AsignaturaBeanDAO asignaturaBeanDAO = new AsignaturaBeanDAO();
		BeanUtils.copyProperties(profesorView.getAsignaturaView(),
				asignaturaBeanDAO);
		profesorBeanDAO.setAsignaturaBeanDAO(asignaturaBeanDAO);
		UsuarioBeanDAO usuarioBeanDAO = new UsuarioBeanDAO();
		BeanUtils.copyProperties(profesorView.getUsuarioView(), usuarioBeanDAO);
		profesorBeanDAO.setUsuarioBeanDAO(usuarioBeanDAO);
		profesorDAO.modificar(profesorBeanDAO);
	}

	public List<ProfesorView> listadoProfesores() {
		List<ProfesorView> listadoProfesoresView = new ArrayList<ProfesorView>();
		List<ProfesorBeanDAO> listadoProfesoresDAO = profesorDAO.listarTodos();

		for (ProfesorBeanDAO profesorBeanDAO : listadoProfesoresDAO) {
			ProfesorView profesorView = new ProfesorView();
			BeanUtils.copyProperties(profesorBeanDAO, profesorView);
			AsignaturaView asignaturaView = new AsignaturaView();
			BeanUtils.copyProperties(profesorBeanDAO.getAsignaturaBeanDAO(),
					asignaturaView);
			profesorView.setAsignaturaView(asignaturaView);
			UsuarioView usuarioView = new UsuarioView();
			BeanUtils.copyProperties(profesorBeanDAO.getUsuarioBeanDAO(),
					usuarioView);
			profesorView.setUsuarioView(usuarioView);
			listadoProfesoresView.add(profesorView);
		}

		return listadoProfesoresView;
	}

	@Override
	public ProfesorView getProfesorByDni(String dni) {
		ProfesorBeanDAO profesorBeanDAO = profesorDAO.findProfesorByDni(dni);
		ProfesorView profesorView = new ProfesorView();
		BeanUtils.copyProperties(profesorBeanDAO, profesorView);
		AsignaturaView asignaturaView = new AsignaturaView();
		BeanUtils.copyProperties(profesorBeanDAO.getAsignaturaBeanDAO(),
				asignaturaView);
		profesorView.setAsignaturaView(asignaturaView);
		UsuarioView usuarioView = new UsuarioView();
		BeanUtils.copyProperties(profesorBeanDAO.getUsuarioBeanDAO(),
				usuarioView);
		profesorView.setUsuarioView(usuarioView);
		return profesorView;
	}

	public List<ProfesorView> listadoProfesoresByName(String nombre) {
		List<ProfesorView> profesorViews = new LinkedList<ProfesorView>();
		List<ProfesorBeanDAO> profesorBeanDAOs = profesorDAO
				.listadoProfesoresByName(nombre);
		Iterator<ProfesorBeanDAO> iterator = profesorBeanDAOs.iterator();
		while (iterator.hasNext()) {
			ProfesorBeanDAO profesorBeanDAO = iterator.next();
			ProfesorView profesorView = new ProfesorView();
			BeanUtils.copyProperties(profesorBeanDAO, profesorView);
			profesorViews.add(profesorView);
		}
		return profesorViews;
	}

}